🔁 Terraform count vs for_each
📌 count
- Terraform tracks resources by index
- State looks like:
resource.name[0] resource.name[1] - ⚠️ Removing/reordering items → index shift
- ❌ Can cause unintended destroy & recreate
- Avoid using it
✅ Example
variable "users" {
type = list(string)
default = [
"user1.txt",
"user2.txt",
"user3.txt"
]
}
variable "content" {
default = "password: S3cr3tP@ssw0rd"
}
resource "local_sensitive_file" "name" {
count = length(var.users)
filename = var.users[count.index]
content = var.content
}📌 State format (list)
local_sensitive_file.name[0]
local_sensitive_file.name[1]
📌 for_each
Use when:
- No index shifting like count
- ✔️ Removing one item → only that resource is destroyed
- ✅ Stable & production-safe
- State looks like:
resource.name["user1.txt"]
resource.name["user2.txt"]
✅ Same Example (using for_each)
variable "users" {
type = list(string)
default = [
"user1.txt",
"user2.txt",
"user3.txt"
]
}
variable "content" {
default = "password: S3cr3tP@ssw0rd"
}
resource "local_sensitive_file" "name" {
for_each = toset(var.users)
filename = each.value
content = var.content
}📌 State format (map)
local_sensitive_file.name["user1.txt"]
local_sensitive_file.name["user2.txt"]